//
//  ViewController.m
//  ExcelTest
//
//  Created by BestVast on 2021/8/10.
//

#import "ViewController.h"
#import <xlsxwriter.h>
#define kRatio(x) x
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [self writeExcel];
}

//https://www.ioser.fun/30.html
//iOS开发创建Excel表格、Excel数据插入、导出Excel
- (void)writeExcel {
    // 获取cache路径
        NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *xlsxName = @"test.xlsx";

        // 拼接 cache路径 + 名为xlsxName的文件   注意：该路径下的文件名一定要和后续导出的文件名保持一致，否则后续执行导出操作时，读取不到该文件
        NSString *filename = [documentDirectory stringByAppendingPathComponent:xlsxName];
        
        NSLog(@"path->%@", filename);
        // 创建新xlsx文件，路径需要转成c字符串
        lxw_workbook  *workbook  = workbook_new([filename UTF8String]);
        // 创建sheet
        lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
        
        // 格式1
        lxw_format *titleformat = workbook_add_format(workbook);
        // 加粗
        format_set_bold(titleformat);
        // 字体尺寸
        format_set_font_size(titleformat, kRatio(20));
        // 内容垂直居中
        format_set_align(titleformat, LXW_ALIGN_VERTICAL_CENTER);
        // 内容水平居中
        format_set_align(titleformat, LXW_ALIGN_CENTER);
//        worksheet_set_row(worksheet, 0, kRatio(18), titleformat);
        format_set_border(titleformat, LXW_BORDER_THIN);// 边框（四周）
    // 250 116 34
        format_set_bg_color(titleformat, 0xfa2207);
        worksheet_write_string(worksheet, 0, 0, "地址", titleformat);
        worksheet_write_string(worksheet, 0, 1, "用途", titleformat);
        worksheet_write_string(worksheet, 0, 2, "设备接口", titleformat);
        worksheet_write_string(worksheet, 0, 3, "互联地址", titleformat);
        worksheet_write_string(worksheet, 0, 4, "节点号", titleformat);
        worksheet_write_string(worksheet, 0, 5, "分配电话号码", titleformat);
    
        

        // 格式2
        lxw_format *columnTitleformat = workbook_add_format(workbook);
        // 内容垂直居中
        format_set_align(columnTitleformat, LXW_ALIGN_VERTICAL_CENTER);
        // 内容水平居中
        format_set_align(columnTitleformat, LXW_ALIGN_CENTER);
        // 字体尺寸
        format_set_font_size(columnTitleformat, kRatio(16));
        // 设置边框
        format_set_border(columnTitleformat, LXW_BORDER_THIN);// 边框（四周）
        format_set_text_wrap(columnTitleformat);
        
        // 格式3
        lxw_format *columnTitleformat1 = workbook_add_format(workbook);
        // 内容垂直居中
        format_set_align(columnTitleformat1, LXW_ALIGN_VERTICAL_CENTER);
        // 内容水平居中
        format_set_align(columnTitleformat1, LXW_ALIGN_LEFT);
        // 字体尺寸
        format_set_font_size(columnTitleformat1, kRatio(16));
        // 设置边框
        format_set_border(columnTitleformat1, LXW_BORDER_THIN);// 边框（四周）
        format_set_bg_color(columnTitleformat1, 0xfa7122);
        //设置可以换行
        format_set_text_wrap(columnTitleformat1);
        
        // 设置第0列到第0列的宽度为30。
        worksheet_set_column(worksheet, 0, 0, kRatio(30), NULL);
        // 设置第1列到第1列的宽度为30。
        worksheet_set_column(worksheet, 1, 1, kRatio(30), NULL);
        // 设置第2列到第2列的宽度为30。
        worksheet_set_column(worksheet, 2, 2, kRatio(35), NULL);
        worksheet_set_column(worksheet, 3, 3, kRatio(35), NULL);
        worksheet_set_column(worksheet, 4, 4, kRatio(35), NULL);
        worksheet_set_column(worksheet, 5, 5, kRatio(35), NULL);
    
    int line = 1;
    for (int i = 224; i <= 255; i++) {
        for (int j = 0; j <= 255; j++) {
            NSString *first = [NSString stringWithFormat:@"30.48.%d.%d/30", i, j];
            worksheet_write_string(worksheet, line, 0, [first cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            // 合并单元格。第一列line行到line+3行
            worksheet_merge_range(worksheet, line, 1, line + 3, 1, [@"预留" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            worksheet_write_string(worksheet, line, 2, [@"不可用" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            line += 1;
            j += 1;
            first = [NSString stringWithFormat:@"30.48.%d.%d", i, j];
            worksheet_write_string(worksheet, line, 0, [first cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            worksheet_write_string(worksheet, line, 2, [@"" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            line += 1;
            j += 1;
            first = [NSString stringWithFormat:@"30.48.%d.%d", i, j];
            worksheet_write_string(worksheet, line, 0, [first cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            worksheet_write_string(worksheet, line, 2, [@"" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            line += 1;
            j += 1;
            first = [NSString stringWithFormat:@"30.48.%d.%d", i, j];
            worksheet_write_string(worksheet, line, 0, [first cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            worksheet_write_string(worksheet, line, 2, [@"不可用" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
            line += 1;
            // 合并单元格。第line行第1列到6列
            worksheet_merge_range(worksheet, line, 0, line, 5, [@"" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat1);
            
            line += 1;
        }
    }

//        // 合并单元格。1行0列到3行0列合并为一行，并设定内容为"基本情况"并设置格式
//        worksheet_merge_range(worksheet, 1, 0, 3, 0, [@"基本情况" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
//        // 合并单元格。4行0列到5行0列合并为一行，并设定内容为"初审建议"并设置格式
//        worksheet_merge_range(worksheet, 4, 0, 5, 0, [@"初审建议" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
//        // 合并单元格。6行0列到11行0列合并为一行，并设定内容为"风险评估"并设置格式
//        worksheet_merge_range(worksheet, 6, 0, 11, 0, [@"风险评估" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
//        // 合并单元格。12行0列到17行0列合并为一行，并设定内容为"贷审会意见"并设置格式
//        worksheet_merge_range(worksheet, 12, 0, 17, 0, [@"贷审会意见" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);
//        // 合并单元格。18行0列到19行0列合并为一行，并设定内容为"最终结论"并设置格式
//        worksheet_merge_range(worksheet, 18, 0, 19, 0, [@"最终结论" cStringUsingEncoding:NSUTF8StringEncoding], columnTitleformat);

        
        //保存
        workbook_close(workbook);


}



- (void)text {
    // 文件保存的路径,这里也可以储存在NSDocumentDirectory
    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filename = [documentPath stringByAppendingPathComponent:@"Excel_Demo.xlsx"];

    // 创建新xlsx文件，路径需要转成c字符串
    lxw_workbook  *workbook  = workbook_new([filename UTF8String]);
    // 创建sheet
    lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
    // 保存生成文件：
    workbook_close(workbook);

    // 设置列宽
    // 设置第0列到第3列的宽度为30。
    worksheet_set_column(worksheet, 0, 3, 30, NULL);
    // 设置第4列宽度为50。
    worksheet_set_column(worksheet, 4, 4, 50, NULL);

    // 单元格属性设置
    // 设置单元格格式使用lxw_format，可以设置字体、颜色、对齐方式、边框等等所有属性。
    // 新建单元格格式对象
    lxw_format *format = workbook_add_format(workbook);
    // 字体
    format_set_bold(format);// 加粗
    format_set_font_color(format, LXW_COLOR_RED);//颜色
    //对齐方式
    format_set_align(format, LXW_ALIGN_CENTER);// 水平居中
    format_set_align(format, LXW_ALIGN_VERTICAL_CENTER);//垂直居中
    //设置边框
    format_set_border(format, LXW_BORDER_MEDIUM);// 边框（四周）：中宽边框
    format_set_right(format, LXW_BORDER_DOUBLE);// 右边框：双线边框
    //设置数字格式
    format_set_num_format(format, "￥#,##0.00");
    //设置可以换行
    format_set_text_wrap(format);
    //设置第5行的高度和格式
    worksheet_set_row(worksheet, 5, 80, format);
    
    // 单元格写入数据
    // 写入文字 第1行第0列写入"Hello"并设置格式为之前定义的"format"
    worksheet_write_string(worksheet, 1, 0, "Hello", format);
    // 写入文字 第1行第1列写入"World"
    worksheet_write_string(worksheet, 1, 1, "World", NULL);

    // 写入数字 第2行第0列写入123.456并设置格式为之前定义的"format"
    worksheet_write_number(worksheet, 2, 0, 123.456, format);
    // 写入数字 第3行第5列写入123.456
    worksheet_write_number(worksheet, 3, 5, 123.456, NULL);

    // 写入文字 第5行第5列写入"哈哈"并设置格式为之前定义的"format"
//    worksheet_write_number(worksheet, 5, 3, [@"哈哈" UTF8String], format);
  // 写入文字 第6行第4列写入"哈哈"
//    worksheet_write_number(worksheet, 6, 4, [@"哈哈" UTF8String], NULL);

    
    /// 合并单元格
    // 合并单元格。18行1列到18行2列合并为一行，并设定内容为"哈哈",并设置格式
    worksheet_merge_range(worksheet, 18, 1, 18, 2, [@"哈哈" UTF8String], format);
    // 合并单元格。12行0列到17行0列合并为一行，并设定内容为"呵呵",并设置格式
    worksheet_merge_range(worksheet, 12, 0, 17, 0, [@"呵呵" UTF8String], format);




}
@end
